#!/usr/bin/env python3
# coding: utf-8
# File: chatbot_graph.py
# Author: lhy<lhy_in_blcu@126.com,https://huangyong.github.io>
# Date: 18-10-4

from question_classifier import *
from question_parser import *
from answer_search import *

'''问答类'''


class ChatBotGraph:
    def __init__(self):
        # 问句类型分类
        self.classifier = QuestionClassifier()
        # 问句解析
        self.parser = QuestionPaser()
        # 查询答案，返回对于的模板
        self.searcher = AnswerSearcher()

    def chat_main(self, sent):
        answer = '您好，我是小勇医药智能助理，希望可以帮到您。如果没答上来，可联系https://liuhuanyong.github.io/。祝您身体棒棒！'
        # 第一步 问句类型分类
        # 【根据 实体类型types 和 问句疑问词 确定查询模板（分类查询语句）】
        # 返回data， 返回问题类型的列表：data['question_types']  实体名&类型的列表：data['args']
        res_classify = self.classifier.classify(sent)
        # 如果 问句类型不存在，返回查询不到（委婉回答）
        if not res_classify:
            return answer
        # 第二步 问句解析
        # 根据第一步返回的 问题类型 和 实体信息（名&类型），分析语句 循环判断，返回sql语句
        res_sql = self.parser.parser_main(res_classify)
        # 第三步 查询答案
        # 根据对应的question_type，调用相应的回复模板，返查询回结果
        final_answers = self.searcher.search_main(res_sql)
        # 如果 没有查询到答案，返回（委婉回答）
        if not final_answers:
            return answer
        # 查询到怎：返回查询结果
        else:
            return '\n'.join(final_answers)


if __name__ == '__main__':
    # 实例化ChatBotGraph类为：handler
    handler = ChatBotGraph()
    while 1:
        # 输入问题：question
        question = input('用户:')
        # 将问句question传参给chat_main函数
        answer = handler.chat_main(question)
        print('小勇:', answer)
